
using namespace std;

#include "IncludesServidor.h"
/*
//Defino como globales las varibales utilizadas en el handler.
bool fin_logico = true;
server dato;
ServerThread *servidor;

//Funciones
void signalHandler(int signal);
void mostrarAyudaGenerica();
*/
//Main
int main(int argc, char **argv){/*
	string command = "                                                  ";
	
	//Me attacho a las señales de finalización.
	signal(SIGINT,signalHandler);
	signal(SIGTERM,signalHandler);

	// Verifico cantidad de parametros recibidos.
	if(argc !=2){
		// Mensaje de error si los parámetros no son correctos.
		cout << "[ERROR] - Parámetros Incorrectos, cantidad incorrecta.	" << endl;
		mostrarAyudaGenerica();
		exit(1);
	}

	string parametro = *(argv+1);
	string param = parametro.substr(0,2);
	int puerto = atoi(parametro.substr(2,parametro.length()-2).c_str());

	//Verifico que se ingrese bien el puero.
	if(param.compare("-p") != 0 || puerto <= 1024 || puerto >= 65535){
		// Mensaje de error si los parámetros no son correctos.
		cout << "[ERROR] - Parámetros Incorrectos, puerto mal ingresado	" << endl;
		mostrarAyudaGenerica();
		exit(1);
	}

	//Thread del servidor.
	servidor = new ServerThread(ATTACH);

	//Genero el objeto Thread para tomar los comandos al servidor por sysin
	dato.mutex_server = new ThreadMutex();
	dato.mutex_server->P();
	dato.puerto = puerto;
	servidor->set_dato((void *)&dato);

	//Lo lanzo.
	servidor->start();

	//Verifico si se quiere cerrar el Server.
	while(command.compare("FIN") != 0 && fin_logico){
		dato.mutex_server->P();
		cout << "[INFO] - Ingrese \"FIN\" para finalizar el servidor: " << endl ;
		getline(cin, command);
		dato.mutex_server->V();
	}

	//Primero finalizo el hilo de escucha de comandos del server.
	pthread_kill(servidor->get_id(),SIGUSR1);
	//Espero su finalización.
	servidor->join();
	//Elimina el mutex.
	dato.mutex_server->Eliminar();

	return 0;
}

// Handler que toma las señal de finalización y la trasmite al thread.
void signalHandler(int signal){
	//Primero finalizo el hilo de escucha de comandos del server.
	pthread_kill(servidor->get_id(),SIGUSR1);
	//Espero su finalización.
	servidor->join();
	//Elimina el mutex.
	dato.mutex_server->Eliminar();
*/
	exit(0);
};
/*
//Muestra la ayuda del programa.
void mostrarAyudaGenerica(){
	cout << "-----------------------------------------------------------------------" << endl;
	cout << "                     Ayuda del programa								" << endl;
	cout << "-----------------------------------------------------------------------" << endl;
	cout << "Sintaxis de uso:														" << endl;
	cout << "   programa -p(Numero de Puerto)										" << endl;
	cout << "-----------------------------------------------------------------------" << endl;
	cout << "Especificaciones generales:											" << endl;
	cout << "   -El valor del puerto debe estar entre 1024 y 65535					" << endl;
	cout << "   -El archivo de log sera Log/log.txt									" << endl;
	cout << "   -Para terminar el servidor puede ingresar \"FIN\"					" << endl;
	cout << "   -Para terminar el servidor puede enviar la señal SIGINT o SIGTERM	" << endl;
	cout << "-----------------------------------------------------------------------" << endl;
}
*/
